package com.gy.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gy.entity.User;
import com.gy.result.Result;
import com.gy.user.LogoutRequest;
import com.gy.user.UserLoginRequest;
import com.gy.user.UserRegisterRequest;
import com.gy.vo.UpdatePasswordRequest;
import com.gy.vo.UserLoginVO;
import com.gy.vo.UserPersonalVO;
import com.gy.vo.UserResultCountVO;
import com.gy.vo.form.AddMemberVO;

import javax.servlet.http.HttpServletRequest;

public interface UserService extends IService<User> {

    Result<UserLoginVO> userLogin(UserLoginRequest userLoginRequest);



    Result logout(LogoutRequest logoutRequest);


    Result<UserPersonalVO> userRegister(UserRegisterRequest userRegisterRequest);

    // 减少用户的论文总数
    void decrementUserPaperCount();
    void incrementUserPaperCount();
    void incrementUserPaperCount(Long userId);

    // 减少用户的专利总数
    void decrementUserPatentCount();
    void incrementUserPatentCount();

    // 减少用户的软件著作数量
    void decrementUserCopyrightCount();
    void incrementUserCopyrightCount();

    // 减少用户的个人获奖总数
    void decrementUserAwardPersonalCount();
    void incrementUserAwardPersonalCount();

    // 减少用户的学生获奖总数
    void decrementUserAwardStudentCount();
    void incrementUserAwardStudentCount();
    void incrementUserAwardStudentCount(Long userId);

    // 减少用户的继续教育材料总数
    void decrementUserMaterialCount();
    void incrementUserMaterialCount();

    // 减少用户的著作信息总数
    void decrementUserPublicationCount();
    void incrementUserPublicationCount();

    // 减少用户的新闻报道上传总数
    void decrementUserReportCount();
    void incrementUserReportCount();

    // 减少用户的档案资料总数
    void decrementUserCertificateinfoCount();
    void incrementUserCertificateinfoCount();

    // 减少用户的其它资料总数
    void decrementUserOtherCount();
    void incrementUserOtherCount();

    //新增纵向课题
    void incrementUserLongitudinalCount();

    void decrementUserLongitudinalCount();

    void incrementUserHorizontalCount();

    void decrementUserHorizontalCount();

    Result<UserResultCountVO> getUserPersonalCount();

    Result<UserPersonalVO> updateUserById(UserPersonalVO userPersonalVO);

    String getUserNickNameByUserId();

    String getUserNameByUserId(Long userId);

    String getUserAvatarByUserId(Long userId);
    /**
     * 获取当前登录用户
     *
     * @param token
     * @return
     */
    User getLoginUser(String token);

    /**
     * 获得脱敏后的用户信息
     *
     * @param user
     * @return
     */
    UserPersonalVO getUserVO(User user);

     AddMemberVO getUserPersonalInfo(Long userId);

    boolean isUserExist(Long userId);

    Result<String> changePassword(Long userId, UpdatePasswordRequest changePasswordRequest);
}
